#ifndef _IMM_H
#define _IMM_H
#include "matrix.h"
#include "kalman_filter.h"

// IMM结构体
typedef struct
{
    KalmanFilter **models; // 模型列表
    Matrix *P_trans;       // 转移概率矩阵
    Matrix *U_prob;        // 模型概率
    Matrix ***model_trans; // 模型转换矩阵
    int mode_cnt;          // 模型数量
} Imm;

// IMM函数声明
Imm *create_imm(KalmanFilter **models, Matrix ***model_trans, Matrix *P_trans, Matrix *U_prob, int mode_cnt);
void free_imm(Imm *imm);
Matrix *imm_filt(Imm *imm, Matrix *Z);

// 运动模型函数声明
// 匀速模型(CV)
KalmanFilter *kf_cv();
// CT_xy模型
KalmanFilter *kf_ct_xy();
// CT_yz模型
KalmanFilter *kf_ct_yz();
// CT_xz模型
KalmanFilter *kf_ct_xz();
// 创建IMM-CVT滤波器
Imm *imm_cvt();

// 打印矩阵内容（调试用）
void print_matrix(Matrix *mat);

#endif